package ecom.stateless;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import ecom.api.IChercheurRemote;
import ecom.entity.AnnonceChercheurEntity;
import ecom.entity.AnnonceProprietaireEntity;
import ecom.entity.ChercheurEntity;

import java.util.Date;
import java.util.List;

import org.apache.commons.logging.*;

@Stateless(mappedName = "ecom.stateless.ChercheurStateless@Remote", description = "Chercheur stateless", name = "ChercheurStateless")
public class ChercheurStateless implements IChercheurRemote {

	Log log = LogFactory.getLog(ChercheurStateless.class);
	@PersistenceContext
	private EntityManager m_EntityManager = null;
	private ChercheurEntity myChercheur;



	public void create(String nom, String prenom, String pseudo, String mdp, String ville, int departement, String mail, int numtel, Date naissance, String role) {
		myChercheur = new ChercheurEntity();
		myChercheur.setNom(nom);
		myChercheur.setPrenom(prenom);
		myChercheur.setVille(ville);
		myChercheur.setPseudo(pseudo);
		myChercheur.setMdp(mdp);
		myChercheur.setVille(ville);
		myChercheur.setDepartement(departement);
		myChercheur.setMail(mail);
		myChercheur.setNumTel(numtel);
		myChercheur.setDateNaissance(naissance);
		myChercheur.setRole(role);
		m_EntityManager.persist(myChercheur);
		log.info("On vient de faire persister chercheur " + pseudo);
	}

	public void create(String nom, String prenom, String pseudo, String mdp, String ville, String role) {
		myChercheur = new ChercheurEntity();
		myChercheur.setNom(nom);
		myChercheur.setPrenom(prenom);
		myChercheur.setVille(ville);
		myChercheur.setPseudo(pseudo);
		myChercheur.setMdp(mdp);
		myChercheur.setVille(ville);
                //		myChercheur.setDepartement(departement);
                //		myChercheur.setMail(mail);
		//myChercheur.setNumTel(numtel);
		//myChercheur.setDateNaissance(naissance);
		myChercheur.setRole(role);
		m_EntityManager.persist(myChercheur);
		log.info("On vient de faire persister chercheur " + pseudo);
	}


	public ChercheurEntity SaveChercheur(ChercheurEntity myChercheur) {
		m_EntityManager.merge(myChercheur);
		return myChercheur;
	}

	public List<AnnonceChercheurEntity> findMesAnnonces(long id) {   	
		return m_EntityManager.createQuery("SELECT p FROM AnnonceChercheurEntity p WHERE p.chercheurEntityAC='"+ id +"'").getResultList();
	}

	public List<AnnonceProprietaireEntity> findMesFavoris(long id) {   	
		return m_EntityManager.createQuery("SELECT p FROM ChercheurEntity c JOIN c.mesFavoris p WHERE c.id = "+id).getResultList();   	
	}

	public ChercheurEntity findPseudo(String pseudo){
		java.util.List <ChercheurEntity> list = m_EntityManager.createQuery("SELECT p FROM ChercheurEntity p WHERE p.myUtilisateur.myCompteEntity.pseudo='"+ pseudo +"'").getResultList();
		if(list.size() == 1) {
			ChercheurEntity monchercheur = list.get(0);
			monchercheur.setMesAnnonces(findMesAnnonces(monchercheur.getId()));
			monchercheur.setMesFavoris(findMesFavoris(monchercheur.getId()));
			return monchercheur;
		} else
			return null;
	}


	public ChercheurEntity ModifChercheur(long idChercheur, String nom, String prenom, String mail,
			int numTel, String mdp,  Date dateNaissance, int departement, String ville)
	{
		log.info("entre ModifChercheurModifChercheur");
		myChercheur = m_EntityManager.find(ChercheurEntity.class, idChercheur);
		myChercheur.setNom(nom);
		myChercheur.setPrenom(prenom);
		myChercheur.setMail(mail);
		myChercheur.setNumTel(numTel);
		myChercheur.setMdp(mdp);
		myChercheur.setDateNaissance(dateNaissance);
		myChercheur.setDepartement(departement);
		myChercheur.setVille(ville);
		m_EntityManager.merge(myChercheur);
		return myChercheur;
	}
}
